package com.itany.cloud.service;

import com.itany.cloud.util.ResponseResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;

/**
 * @author 石小俊
 */
// value:指定当前作为OpenFeign的客户端的微服务是谁,其值指定的是对应的微服务名
@Service
@FeignClient("cloud-nacos-provider")
public interface UserServiceClient {

    // 通过FeignClient指定了微服务,但是每个资源所访问的地址也不同
    // 单独的微服务指定的仅仅只是资源地址中协议名://域名:端口的值
    // 在每一个接口中需要指定当前方法调用的是哪一个资源地址
    // 在当前Service中可以使用Handler的一切注解,但是没有任何默认行为
    // 在Handler中,可以通过@RequestMapper指定当前资源访问地址
    // 而在此处接口中,@RequestMapping表示的是调用OpenFeign指定的微服务中的哪一个资源实现该方法
    // 最终访问的资源的地址为:当前微服务地址+通过注解@RequstMapper标注的地址值

    @GetMapping("/users")
    ResponseResult findAll();

    @GetMapping("/users/{id}")
    ResponseResult findById(@PathVariable("id") Integer id);

    @PostMapping("/users")
    ResponseResult addUser(@RequestParam("username") String username, @RequestParam("password") String password);

    @PutMapping("/users")
    ResponseResult modifyUser(@RequestParam("id") Integer id, @RequestParam("username") String username, @RequestParam("password") String password);

    @DeleteMapping("/users/{id}")
    ResponseResult deleteUser(@PathVariable("id") Integer id);

}
